#-*- coding: UTF-8 -*-
from pyramid.httpexceptions import HTTPFound
from pyramid.security import remember
from pyramid.security import forget




from scp.modelo.models import DBSession
from scp.modelo.Usuario import Usuario
from scp.modelo.Permiso import Permiso
from scp.modelo.Proyecto import Proyecto
from scp.modelo.Rol import Rol
from scp.modelo.Recurso import Recurso

from pyramid.response import Response
from pyramid.view import view_config
import json

from pyramid.security import authenticated_userid

import re

#@view_config(renderer='json')
def autorizacion(request):
	"""Método controlador encargado de gestionar la autorizacion de funcionalidades de usuarios.
		URL asociada: /autorizacion/{operacion}
		operacion:
			
		@param request: Petición Http del cliente. 	
	"""

	print ">>>>>>>>>>>>>Controlador de Menus - Inicio>>>>>>>>>>>>>>"
	print "request:"
	print request

	print '>request.metodo'
	
	methodRequest = request.method
	print methodRequest
	
	print '>request.url'
	
	print request.url
	
	
	dicParametros = request.matchdict
	
	
	print "parametros abajo..."
	print request.params
	
	print 'request.body'
	print request.body 
	

	print "operaciónnnnnnnn"
	print dicParametros.get('operacion')
	print "operaciónnnnnnnn"
	
	
	

	print 'dicParametros.get(operacion).find(?):' 
	print dicParametros.get('operacion').find('?')
	
	session = DBSession()
	if dicParametros.get('operacion') == 'admUsuarios':
		
		#traemos todos los permisos del dominio ADM_USUARIOS que posee el usuario
		usuarioLogeado = session.query(Usuario).filter_by( username = authenticated_userid(request) ).first()
		rolesUsuarioLogeado = usuarioLogeado.roles
		

		
		#construimos el JSON que enviaremos
		autorizacionesJson = {}
		for rolIter in rolesUsuarioLogeado:											
			for permisoIter in rolIter.permisos:
				autorizacionesJson[permisoIter.nombre] = False		
			
		response = Response()
		#responseView.body = json.dumps(dict(success = True, items = [{ 'nombreItem': 'Caso de Uso de Login', 'nombreFase':'Análisis'}, { 'nombreItem': 'Caso de Uso de Logout', 'nombreFase':'Análisis'}, { 'nombreItem': 'Login.java', 'nombreFase':'Implementación'}]))
		response.body = json.dumps(dict(success = True, autorizacionesJson = autorizacionesJson))
		response.content_type = 'application/json'
		print 'respondí con un Responseeeee!!!'
		return response
		
	if dicParametros.get('operacion') == 'relaciones':
		
		print 'estoy en autorizaciones relaciones'
		
		#traemos todos los permisos del dominio ADM_USUARIOS que posee el usuario
		usuarioLogeado = session.query(Usuario).filter_by( username = authenticated_userid(request) ).first()
		#rolesUsuarioLogeado = usuarioLogeado.roles
		faseID = request.params['idFase']
		
		#traemos el recurso
		recurso = session.query(Recurso).filter_by( fase_id = faseID, tipo = 'F' ).one()
		

		print '>>>faseID'
		print faseID
		
		print 'usuarioLogeado.id'
		print usuarioLogeado.id

		asignacionesRecurso = session.query(AsignacionRecurso).filter_by( recurso_id = recurso.id, usuario_id = usuarioLogeado.id ).all()
		
		print '>>>len(asignacionesRecurso)'
		print	len(asignacionesRecurso)
		
		#construimos el JSON que enviaremos
		autorizacionesJson = {}
		for asignacion in asignacionesRecurso:
			rolAsigncion = asignacion.rol											
			for permisoIter in rolAsigncion.permisos:
				autorizacionesJson[permisoIter.nombre] = False		
		
		print '>>>autorizacionesJson en relaciones'
		print autorizacionesJson
		
			
		response = Response()
		#responseView.body = json.dumps(dict(success = True, items = [{ 'nombreItem': 'Caso de Uso de Login', 'nombreFase':'Análisis'}, { 'nombreItem': 'Caso de Uso de Logout', 'nombreFase':'Análisis'}, { 'nombreItem': 'Login.java', 'nombreFase':'Implementación'}]))
		response.body = json.dumps(dict(success = True, autorizacionesJson = autorizacionesJson))
		response.content_type = 'application/json'
		return response	
		
	if dicParametros.get('operacion') == 'tabRelaciones':
		
		
		#traemos todos los permisos del dominio ADM_USUARIOS que posee el usuario
		usuarioLogeado = session.query(Usuario).filter_by( username = authenticated_userid(request) ).first()
		#rolesUsuarioLogeado = usuarioLogeado.roles
		faseID = request.params['idFase']
		
		#traemos el recurso
		recurso = session.query(Recurso).filter_by( fase_id = faseID, tipo = 'F' ).first()
		asignacionesRecurso = []
		if recurso is not None:
			asignacionesRecurso = session.query(AsignacionRecurso).filter_by( recurso_id = recurso.id, usuario_id = usuarioLogeado.id ).all()
		
		#construimos el JSON que enviaremos
		respuesta = False
		done = False
		for asignacion in asignacionesRecurso:
			if done == True:
				break
			rolAsigncion = asignacion.rol											
			for permisoIter in rolAsigncion.permisos:
				#autorizacionesJson[permisoIter.nombre] = False		
				if permisoIter.nombre == 'VER_RELACION':
					respuesta = True
					done = True
					break
				
		response = Response()
		response.body = json.dumps(dict(success = True, respuesta = respuesta))
		response.content_type = 'application/json'
		return response	
